日記 2023-12
公開
2023-12-30 22:13

Tclでsqliteクエリ書くのあまりにも楽すぎて、雑にdb evalの中でdb evalしてたんだけどめちゃ遅い。
で、VIEW作ってdb evalのネストを無くしたら速くなった。
ページ生成が0.9secから0.02secに。

O(n^2)だったのがO(n)になったからか、それともトランザクション関係なのかは謎。
N+1が他と比べて圧倒的に速いとは言っても、やっぱそれなりに遅くなるんだな。



wapp、scgiモードで起動したらscgiスッと通る(当たり前か)
テラキモチヨスやね


若干不穏な日記で途切れていたけど、猫たちはめっちゃ元気です。


突然寒くなって猫も体調悪かったり不安だったりするのか、今日はみんなやたら甘えてくる。
可愛いんだけどちょっと心配になる。


試しに画像ファイル(アイコン・コメント)をSQLiteに全て読み込んで出力するように変更してみたんだけど、コメント・スレッド削除がかなり遅くなった。
多分大きめのBlobを削除する際にSQLite内でGCみたいなものが走ってるのかな?
それをDELETE ONのTriggerで走らせるからN+1のGCになるのか、スレッド削除はかなり遅い。
コメントの削除も少しレスポンスが遅いので、コメントが溢れたら古いものから削除にすると、投稿の度に少し待つようになってしまう。

というわけでこの変更はやめる。
ちょっと予想できたので、先にランダムで巨大なBlobを大量に追加・削除してみてスピードを計れば良かった。


試しにSQLiteにアイコン読み込んでbase64で出力してみたら、htmlが500kbになった。
せやな……!



docker立ち上げずにchroot jailでシングルバイナリのテストしたくなって調べたんだけど、全ての情報がとっ散らかってるわ広告が鬱陶しいわで全然目的の情報に辿り着けない。
で、ChatGPTに聞いたら一撃必殺で必要な情報くれた。


うーむ、wapptclshをビルドしようとしたんだけど、glibcのスタティックリンクの面倒さにぶち当たってやめてしまった。
というかwapptclshのMakefileだとこれに当たるのでは??謎。

自前で全てやってlibcに依存してないGoの強さを改めて感じますなあ。


tclとwappで開発用のサーバーリロードボタンがとりあえずできた。
interp createでサーバーインタープリタを別に起動して、/reloadへのアクセス時に親にリロードしてもらう設計。
wappがserverモードだとdelete時にソケットのサーバーを閉じずエラーになるのでフックを追加した。
というかinterp deleteってプロセス終了時みたいにソケットの開放はやってくれないんだ。
ちょっと罠になると思うので覚えておこう。


相変わらずTclの可能性を探っている。
簡単なWebテストフレームワークを書いてみた。
スタックフレームの情報気軽に取れるのは楽しい。
test--で始まる手続きをリストで取得して実行、という力技できるの原始のパワという雰囲気で一周して楽しい。
なんか一貫した理論的な美しさとか、そういったものを全く感じないから心から恋に落ちることはできてないんだけど、やろうと思ったこと全部できるからどんどん馴染んでいく。
身体の相性だけは良いみたいな……


いや〜〜〜Tcl楽でいいね。
やりたいと思ったことがファイルやソケットやSQLite使って雑に書けて良い。
execも楽だから、いざとなったらただの高級シェルスクリプトになって他のコマンドにお任せという思考になれるのも良い。
他の言語だと、どうしてもライブラリでどうにかしたがち


相変わらずSqliteを振り回してるんだけど、Tclでのクエリ結果の扱いが強力すぎる。
SELECT foo FROM ...みたいに問い合わせると、fooという変数にその値が入った状態で結果をループ処理できたりする。
他の動的言語だと、どうしてもresult.fooとかfor foo in ...みたいに変数を噛ませる必要があるのでなかなかこうは行かない。

これを実現するためにはsqliteドライバ側から呼び出された手続きの名前空間を操作する、またはマクロで専用のDSLを組んでSQLは直に書く、という解決法しか思いつかない。
Tclは前者。
後者はLispやシンタックスマクロがある言語だとできるかもしれないけど、SQLのパーサをその言語の構文要素で再実装するハメになって結局馬鹿らしくなりがち……。



アリシアちゃむ……


microbの中途半端なORMみたいなデータ構造を半分ぐらい削除。
併せてN+1対策のクエリも削除して単純なN+1クエリに戻した。
まさにsqlite公式の言う通りで、特に問題無し。


寒いからかけーくんの甘え方が一段と激しさを増している。
おかげでMPは毎ターン全回復している。
言及